package sdk

// 请求结果
type response[T any] struct {
	Code   int    `json:"code"`
	Errmsg string `json:"errmsg"`
	Data   T      `json:"data"`
}

type ContextValue struct {
	UserID   string
	UserName string
	OrgID    string `description:"组织ID"`
}

const (
	NodeTypeNormal int = iota //常规节点
	NodeTypeStart             //开始节点
	NodeTypeEnd               //停止节点
	NodeTypeRoute             //判断节点
)

// Flow 流
type Flow struct {
	NodeID      string     `description:"节点ID"`
	NodeCode    string     `description:"节点编码"`
	NodeName    string     `description:"节点名称"`
	NodeType    int        `description:"节点类型"`
	UserGroupID string     `description:"数据用户组"`
	UserID      string     `description:"数据用户组"`
	Route       *FlowRoute `description:"条件判断(类型为判断节点时有效)" json:",omitempty"`
	RouteDesc   string     `description:"条件描述" json:",omitempty"`
	RouteID     string     `description:"条件判断ID" json:",omitempty"`
	RouteSucc   *Flow      `description:"判断正确路径(类型为判断节点时有效)" json:",omitempty"`
	RouteFail   *Flow      `description:"判断失败路径(类型为判断节点时有效)" json:",omitempty"`
	Child       *Flow      `description:"子节点" json:",omitempty"`
}

type Node struct {
	TopNodeID   string     `description:"主数据ID"`
	NodeID      string     `description:"节点ID"`
	NodeCode    string     `description:"节点编码"`
	NodeName    string     `description:"节点名称"`
	NodeLevel   int        `description:"节点层级"`
	NodeType    int        `description:"节点类型"`
	UserGroupID string     `description:"数据用户组"`
	UserID      string     `description:"用户ID"`
	RouteID     string     `description:"判断节点ID"`
	RouteSuccID string     `description:"成功数据流ID"`
	RouteFailID string     `description:"失败数据流ID"`
	ChildID     string     `description:"子节点数据ID"`
	Route       *FlowRoute `description:"条件判断(类型为判断节点时有效)" json:",omitempty"`
}

type FlowRoute struct {
	RouteID  string       `description:"公式ID"`
	ParentID string       `description:"父数据ID"`
	Formula  string       `description:"公式解析(eg. a=b|a>b|a<b|a>=b|a<=b|a)"`
	ActType  string       `description:"连接符号(eg. and|or)"`
	Desc     string       `description:"完整公式描述"`
	Children []*FlowRoute `description:"子判断"`
}

type WorkCreateReq struct {
	WorkFlowCode string `description:"工作编码"`
	WorkName     string `description:"工作名称"`
	ExtendVal1   string `description:"扩展字段1"`
	ExtendVal2   string `description:"扩展字段2"`
	ExtendVal3   string `description:"扩展字段3"`
	ExtendVal4   string `description:"扩展字段4"`
	ExtendVal5   string `description:"扩展字段5"`
	Data         string `description:"工作数据的json内容"`
}

type WorkNode struct {
	WorkID           string     `description:"工作ID"`
	WorkFlowID       string     `description:"工作流ID"`
	WorkFlowCode     string     `description:"工作编码"`
	WorkName         string     `description:"工作名称"`
	WorkStatus       int        `description:"工作状态(0=运行,1=结束,2=终止)"`
	WorkEndMemo      string     `description:"工作结束备注"`
	WorkDetailID     string     `description:"工作明细ID"`
	WorkDetailStatus int        `description:"工作状态(0=未启用,1=启用,2=结束)"`
	NodeID           string     `description:"节点ID"`
	NodeType         int        `description:"节点类型"`
	RouteID          string     `description:"判断ID"`
	NodeName         string     `description:"节点名称"`
	ExtendVal1       string     `description:"扩展字段1"`
	ExtendVal2       string     `description:"扩展字段2"`
	ExtendVal3       string     `description:"扩展字段3"`
	ExtendVal4       string     `description:"扩展字段4"`
	ExtendVal5       string     `description:"扩展字段5"`
	Data             string     `description:"工作数据的json内容"`
	RouteSuccID      string     `description:"判断成功流程ID"`
	RouteFailID      string     `description:"判断失败流程ID"`
	ChildID          string     `description:"下游节点ID"`
	SRouteID         string     `description:"工作流判断ID"`
	Route            *FlowRoute `description:"条件判断(类型为判断节点时有效)" json:",omitempty"`
}

type WorkFlow struct {
	WorkFlowID   string `description:"工作流ID"`
	WorkFlowCode string `description:"工作流编码"`
	WorkFlowName string `description:"工作流名称"`
	FlowID       string `description:"流ID"`
	IsUse        int    `description:"是否启用(相同编码同一时间只允许有一个流被启用)"`
	CreateUserID string `description:"创建人ID"`
	CreateUser   string `description:"创建人"`
	CreateTime   string `description:"创建时间"`
	OrgID        string `description:"组织ID"`
}

type Work struct {
	WorkID       string `description:"工作ID"`
	WorkFlowID   string `description:"工作流ID"`
	WorkFlowCode string `description:"工作编码"`
	WorkName     string `description:"工作名称"`
	WorkStatus   int    `description:"工作状态(0=运行,1=结束,2=终止)"`
	WorkEndMemo  string `description:"工作结束备注"`
	ExtendVal1   string `description:"扩展字段1"`
	ExtendVal2   string `description:"扩展字段2"`
	ExtendVal3   string `description:"扩展字段3"`
	ExtendVal4   string `description:"扩展字段4"`
	ExtendVal5   string `description:"扩展字段5"`
	Data         string `description:"工作数据的json内容"`
	CreateTime   string `description:"创建时间"`
	CreateUser   string `description:"创建用户"`
}
